package models

import (
	"github.com/jinzhu/gorm"
	"kop/modules/item/entity"
)

func AutoMigrate(dB *gorm.DB) {
	dB.AutoMigrate(new(entity.Item))
	dB.AutoMigrate(new(entity.ItemLog))
}

//func key(roleID, itemID int32) string {
//	return fmt.Sprintf("item-%d-%d", roleID, itemID)
//}

func Create(dB *gorm.DB, roleID, itemID, number int32) *entity.Item {

	var item = &entity.Item{
		RoleID: roleID,
		ItemID: itemID,
		Number: number,
	}

	if err := dB.Create(item).Error; err != nil {
		panic(err)
	}

	return item
}

func GetItems(dB *gorm.DB, roleID int32) []*entity.Item {

	var items = make([]*entity.Item, 0)
	if err := dB.Where("role_id = ?", roleID).Find(&items).Error; err != nil {
		panic(err)
	}

	return items
}

func GetItem(dB *gorm.DB, roleID, itemID int32) *entity.Item {

	var item entity.Item

	if err := dB.Where("role_id = ? AND item_id = ?", roleID, itemID).First(&item).Error; err != nil {
		if err == gorm.ErrRecordNotFound {
			return nil
		} else {
			panic(err)
		}
	}

	return &item
}

func Save(dB *gorm.DB, item *entity.Item) {

	var err error
	if item.Number <= 0 {

		err = dB.Delete(item).Error
	} else {

		err = dB.Save(item).Error
	}

	if err != nil {
		panic(err)
	}
}

//func Add(, roleID, itemID, number int32) entity.Item {
//
//	var item, ok = GetItem(dB, roleID, itemID)
//	if !ok {
//		return CreateItem(dB, roleID, itemID, number)
//	}
//
//	item.Number += number
//	const RumMax = 200 // 朗姆酒上限200个
//
//	if item.ItemID == consts.Rum && item.Number > RumMax {
//		item.Number = RumMax
//	}
//
//	if err := Save(dB, &item); err != nil {
//		panic(err)
//	}
//
//	return item
//}
//
//func Del(dB *gorm.DB, roleID, itemID, number int32) (entity.Item, error) {
//
//	var item = GetItem(model, roleID, itemID)
//	if item != nil {
//
//		switch itemID {
//		case consts.Gold:
//			return item, errors.GoldNotEnoughError
//		case consts.Diamond:
//			return item, errors.DiamondNotEnoughError
//		default:
//			return item, errors.ItemNotEnoughError
//		}
//	}
//
//	if item.Number < number {
//
//		switch itemID {
//		case consts.Gold:
//			return item, errors.GoldNotEnoughError
//		case consts.Diamond:
//			return item, errors.DiamondNotEnoughError
//		default:
//			return item, errors.ItemNotEnoughError
//		}
//
//	} else {
//		item.Number -= number
//	}
//
//	return item, Save(dB, &item)
//}
